package com.ripservice.mapper;

import com.ripservice.entity.RouteSnapshotEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface RouteSnapshotMapper {
    /**
     * 插入路由快照实体
     */
    void insert(RouteSnapshotEntity e);

    /**
     * 获取指定仿真的所有快照
     * @param simulationId 仿真ID
     * @return 路由快照列表
     */
    List<RouteSnapshotEntity> findBySimulationId(@Param("simulationId") Long simulationId);

    /**
     * 根据拓扑ID查询所有快照
     * @param topologyId 拓扑ID
     * @return 路由快照列表
     */
    List<RouteSnapshotEntity> findByTopology(@Param("topologyId") Long topologyId);

    /**
     * 根据拓扑ID和路由器ID查询快照列表
     * @param topologyId 拓扑ID
     * @param routerId 路由器ID
     * @return 路由快照列表
     */
    List<RouteSnapshotEntity> findByTopologyAndRouter(@Param("topologyId") Long topologyId, @Param("routerId") String routerId);

    /**
     * 获取指定路由器的最新快照(为什么是可以通过拓扑ID和路由器ID获取)
     * @param topologyId 拓扑ID
     * @param routerId 路由器ID
     * @return 路由快照实体
     */
    RouteSnapshotEntity findLatestByTopologyAndRouter(@Param("topologyId") Long topologyId, @Param("routerId") String routerId);

    /**
     * 删除指定仿真ID的快照
     * @param simulationId 仿真ID
     */
    void deleteBySimulationId(@Param("simulationId") Long simulationId);

    /**
     * 删除指定拓扑ID的快照
     * @param topologyId 拓扑ID
     */
    void deleteByTopologyId(@Param("topologyId") Long topologyId);

    /**
     * 根据多个条件组合查询快照
     * @param topologyId 拓扑ID（可选）
     * @param simulationId 仿真ID（可选）
     * @param routerId 路由器ID（可选）
     * @return 路由快照列表
     */
    List<RouteSnapshotEntity> findByFilter(@Param("topologyId") Long topologyId,
                                           @Param("simulationId") Long simulationId,
                                           @Param("routerId") String routerId);
}